home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NetNews Offline 2
/
NetNews Offline Volume 2.iso
/
news
/
de
/
comm
/
isdn
/
6843
< prev
next >
Wrap
Text File
|
1996-08-06
|
4KB
|
149 lines
Path: pa.dec.com!usenet
From: 73064.1157@compuserve.com (Rudi Ernst)
Newsgroups: de.comm.isdn,de.comp.os.ms-windows,fido.ger.isdn
Subject: ISDN-Verbindung abbrechen mit ISDI 3.0
Date: Wed, 20 Mar 1996 12:09:41 GMT
Organization: Digital Equipment Corporation, Palo Alto, CA, USA
Message-ID: <4iosjg$lnh@usenet.pa.dec.com>
NNTP-Posting-Host: ufc234.ufc.dec.com
X-Newsreader: Forte Free Agent 1.0.82
Hallo Leute,
ich habe zur Zeit Probleme mit einer ISDN-TCP/IP-Applikation (win16),
in der ich eine ISDN-Verbindung vom Programm aus beenden mu▀. Fⁿr das
IP-Routing verwenden wir hier ISDI von Hr. Herbert Hanewinkel. Nach
dem socket close hΣlt ISDI die ISDN-Verbindung noch eine einstellbare
Zeit lang offen. Das Programm soll nun die ISDI-ISDN-Verbindung
beenden.
Unter ISDI 2.x funktionierte dies ⁿber den Control Interrupt des ISDI-
Treibers, unter ISDI 3.0 mu▀ laut Hr. Hanewinkel direkt eine Treiber-
Funktion aufgerufen werden. Die Aufrufe wurden von Hr. Hanewinkel zur
Verfⁿgung gestellt, und funkionieren auch prΣchtig, wenn ich sie in
ein DOS-Programm einbaue, nicht jedoch in einem Windows-Programm.
Momentan wei▀ ich nicht, ob ich ein ISDI-Problem habe oder ein
Windows-Problem (funktionieren die int 21h unter Windows ⁿberhaupt).
Der nachfolgende Programmausschnitt wurde mit Visual C++ 1.51 erstellt
und lΣuft bis zum Aufruf der Funktion PaketInt(), wenn er in eine
QuickWin-App eingebaut ist, in einer Windows-App() steigt
das Programm schon beim ersten int 21h aus.
#include <dos.h>
#include <stdio.h>
typedef void (far *InterruptPtr)(void);
typedef unsigned short word;
typedef unsigned char byte;
#define DEBUG TRUE
#define PDF_ResetInterface 7
typedef struct {
word op;
word status;
byte far *addr1;
byte far *addr2;
word para1;
word para2;
} Ndis_req_type;
static InterruptPtr PaketInt;
Ndis_req_type drv_req = {0, };
Ndis_req_type *p = &drv_req;
#ifdef CAPI2
char __far *dev_file = "CINDI$";
#else
char __far *dev_file = "ISDI$";
#endif
main {
byte far *ios;
word handle;
word dev;
int i;
dev = FP_OFF(dev_file);
_asm mov dx, dev; // open driver
_asm mov ax, 3dc2h;
_asm int 21h;
_asm jnc ok1;
#ifdef DEBUG
printf("driver open failed\n");
#endif
return 0L;
ok1:
_asm mov handle, ax;
#ifdef DEBUG
printf("driver open ok1\n");
#endif
drv_req.op = 1; // driver info call
drv_req.status = 0;
drv_req.addr1 = (byte far *) 0;
drv_req.addr2 = (byte far *) 0;
drv_req.para1 = 0;
drv_req.para2 = 0;
dev = FP_OFF(p);
_asm mov dx, dev;
_asm mov cx, 16;
_asm mov bx, handle;
_asm mov ax, 4402h;
_asm int 21h;
_asm jnc ok3;
return 0L;
ok3:
ios = MK_FP(drv_req.para2, drv_req.para1);
PaketInt = (InterruptPtr) drv_req.addr1;
#ifdef DEBUG
printf("driver info call ok\n");
// 1, ISDI ueber winstart.bat
// Einsprung wie bei Packet
// Ptr auf ISDI Datenstruktur
printf("got vmmflag: %x\n", drv_req.status);
printf("got pktint: %lx\n", drv_req.addr1);
printf("IOS address: %lx\n", ios);
#endif
_asm mov bx, handle; // close device
_asm mov ax, 3e00h;
_asm int 21h;
_asm jnc ok4;
#ifdef DEBUG
printf("driver close failed\n");
#endif
return 0;
ok4:
if(drv_req.status == 1) return 0;
// 1, ISDI ueber winstart.bat
// Einsprung wie bei Packet
printf("got vmmflag: %x\n", drv_req.status);
printf("got pktint: %lx\n", drv_req.addr1);
_asm mov ah, PDF_ResetInterface;
_asm pushf;
PaketInt ();
^^^^^^^^^^^^ General Protection Fault
_asm jnc nc1;
return (-1);
nc1:
return (0);
}
ciao, Rudi
------------------------------------------------------------------------------------
Rudolf Ernst Tel. 089/8212650
Blumenauer Str. 151 A FAX: 089/82908098
81241 Mⁿnchen eMail: 73064.1157@compuserve.com
------------------------------------------------------------------------------------